/**
 * 语言服务接口
 * 符合NestJS规范的接口定义
 * 对应PHP: think\Lang 接口
 * 对应Java: MessageSource 接口
 */
export interface ILanguageService {
  /**
   * 获取消息
   * @param key 消息键
   * @param args 参数
   * @param module 模块名
   * @param type 类型 (api|dict|validate)
   * @param language 语言
   * @returns 消息内容
   */
  getMessage(key: string, args?: any, module?: string, type?: string, language?: string): Promise<string>;

  /**
   * 获取API消息
   * @param key 消息键
   * @param args 参数
   * @param module 模块名
   * @param language 语言
   * @returns API消息
   */
  getApiMessage(key: string, args?: any, module?: string, language?: string): Promise<string>;

  /**
   * 获取字典数据
   * @param key 字典键
   * @param args 参数
   * @param module 模块名
   * @param language 语言
   * @returns 字典数据
   */
  getDictData(key: string, args?: any, module?: string, language?: string): Promise<string>;

  /**
   * 获取验证器消息
   * @param key 验证器键
   * @param args 参数
   * @param module 模块名
   * @param language 语言
   * @returns 验证器消息
   */
  getValidateMessage(key: string, args?: any, module?: string, language?: string): Promise<string>;

  /**
   * 批量获取消息
   * @param keys 消息键数组
   * @param module 模块名
   * @param type 类型
   * @param language 语言
   * @returns 消息对象
   */
  getBatchMessages(keys: string[], module?: string, type?: string, language?: string): Promise<Record<string, string>>;

  /**
   * 获取当前语言
   * @returns 当前语言
   */
  getCurrentLanguage(): string;

  /**
   * 设置语言
   * @param language 语言代码
   */
  setLanguage(language: string): void;

  /**
   * 获取支持的语言列表
   * @returns 支持的语言列表
   */
  getSupportedLanguages(): string[];

  /**
   * 检查语言是否支持
   * @param language 语言代码
   * @returns 是否支持
   */
  isLanguageSupported(language: string): boolean;

  /**
   * 重新加载语言包
   * @param language 语言代码
   */
  reloadLanguagePack(language: string): Promise<void>;

  /**
   * 重新加载所有语言包
   */
  reloadAllLanguagePacks(): Promise<void>;
}
